﻿using QuanLyThuVien.Supporter;
using QuanLyThuVien.BLL;
using QuanLyThuVien.DTO;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace QuanLyThuVien.GUI
{
    public partial class GUISach : DevComponents.DotNetBar.Office2007Form
    {
        private BLLDauSach _bllDauSach;
        private BLLSach _bllSach;
        private BLLTheLoai _bllTheLoai;
        private BLLTacGia _bllTacGia;
        private BLLCuonSach _bllCuonSach;
        private BLLQuyDinh _bllQuyDinh;
        private THAOTAC _ThaoTac;
        private DTOSach _Sach;
        private DTODauSach _DauSach;

        //----------------------------------------------------------------------
        //Desc: constructor mặc định
        //----------------------------------------------------------------------
        public GUISach()
        {
            InitializeComponent();
            KhoiTao();
            _ThaoTac = THAOTAC.XEM;
            _DauSach = new DTODauSach();
            _Sach = new DTOSach();
        }

        //----------------------------------------------------------------------
        //Desc: constructor 1 tham số
        //----------------------------------------------------------------------
        public GUISach(THAOTAC thaotac)
        {
            InitializeComponent();
            KhoiTao();
            _ThaoTac = thaotac;
            _DauSach = new DTODauSach();
            _Sach = new DTOSach();
        }

        //----------------------------------------------------------------------
        //Desc: constructor 3 tham số
        //----------------------------------------------------------------------
        public GUISach(THAOTAC thaotac, DTODauSach dausach, DTOSach sach)
        { 
            InitializeComponent();
            KhoiTao();
            _ThaoTac = thaotac;
            _DauSach = dausach;
            _Sach = sach;
        }

        //----------------------------------------------------------------------
        //Desc: khởi tạo
        //----------------------------------------------------------------------
        public void KhoiTao()
        {
            _bllDauSach = new BLLDauSach();
            _bllSach = new BLLSach();
            _bllCuonSach = new BLLCuonSach();
            _bllTheLoai = new BLLTheLoai();
            _bllTacGia = new BLLTacGia();
            _bllQuyDinh = new BLLQuyDinh();
        }

        //----------------------------------------------------------------------
        //Desc: cập nhật giao diện
        //----------------------------------------------------------------------
        public void CapNhatGiaoDien()
        {
            switch (_ThaoTac)
            { 
                case THAOTAC.SUA:
                    this.Text = "CẬP NHẬT SÁCH";
                    _btnSua.Visible = true;

                    _txtNamXB.ReadOnly = false;
                    _txtNhaXB.ReadOnly = false;
                    _dtNgayNhap.IsInputReadOnly = true;
                    _dtNgayNhap.ButtonDropDown.Visible = false;
                    _txtTriGia.ReadOnly = false;
                    _txtSoLuong.ReadOnly = true;
                    break;
                default:
                    this.Text = "THÔNG TIN SÁCH";
                    _btnSua.Visible = false;

                    _txtNamXB.ReadOnly = true;
                    _txtNhaXB.ReadOnly = true;
                    _dtNgayNhap.IsInputReadOnly = true;
                    _dtNgayNhap.ButtonDropDown.Visible = false;
                    _txtTriGia.ReadOnly = true;
                    _txtSoLuong.ReadOnly = true;
                    break;
            }
        }

        //----------------------------------------------------------------------
        //Desc: cập nhật nội dung
        //----------------------------------------------------------------------
        public void CapNhatNoiDung()
        {
            HienThiThongTinSach();
        }

        //----------------------------------------------------------------------
        //Desc: hiển thị thông tin sách
        //----------------------------------------------------------------------
        public void HienThiThongTinSach()
        {
            _txtTenDauSach.Text = _DauSach.TenDauSach;
            _txtTheLoai.Text = _DauSach.TheLoai.TenTheLoai;
            if (_DauSach.DSCT_TacGia.Count > 0)
                _txtTacGia1.Text = _DauSach.DSCT_TacGia[0].TacGia.TenTG;
            if (_DauSach.DSCT_TacGia.Count > 1)
                _txtTacGia2.Text = _DauSach.DSCT_TacGia[1].TacGia.TenTG;
            if (_DauSach.DSCT_TacGia.Count > 2)
                _txtTacGia3.Text = _DauSach.DSCT_TacGia[2].TacGia.TenTG;
            _txtNamXB.Text = _Sach.NamXB.ToString();
            _txtNhaXB.Text = _Sach.NhaXB;
            _dtNgayNhap.Value = _Sach.NgayNhap;
            _txtTriGia.Text = _Sach.TriGia.ToString();
            _txtSoLuong.Text = _Sach.SoLuong.ToString();
            int sosachdangmuon = _bllCuonSach.DemSoCuonSachDangMuon(_Sach.MaSach);
            if (sosachdangmuon < 0)
                sosachdangmuon = 0;
            _txtDangMuon.Text = sosachdangmuon.ToString();
        }

        //----------------------------------------------------------------------
        //Desc: lấy dữ liệu 
        //----------------------------------------------------------------------
        public DTOSach LayDuLieuForm()
        {
            DTOSach sach = new DTOSach();
            sach.MaDauSach = _DauSach.MaDauSach;
            sach.MaSach = _Sach.MaSach;
            sach.DSCuonSach = _Sach.DSCuonSach;
            long namxb;
            try
            {
                namxb = long.Parse(_txtNamXB.Text);
            }
            catch
            {
                MessageBox.Show("Sai năm xb");
                return null;
            }
            int thoihanxb = _bllQuyDinh.LayThoiHanXB();
            if (thoihanxb > 0)
            {
                if (namxb + thoihanxb < DateTime.Today.Year)
                {
                    MessageBox.Show("Chỉ nhận sách xuất bản trong trong vòng " + thoihanxb.ToString() + " năm");
                    return null;
                }
                else
                    sach.NamXB = namxb;
            }
            else
            {
                MessageBox.Show("Không lấy được quy định thời hạn xuất bản");
                return null;
            }
            sach.NhaXB = _txtNhaXB.Text;
            sach.NgayNhap = _Sach.NgayNhap;
            sach.SoLuong = _Sach.SoLuong;
            double trigia;
            try
            {
                trigia = Double.Parse(_txtTriGia.Text);
            }
            catch
            {
                MessageBox.Show("Nhập sai trị giá");
                return null;
            }
            sach.TriGia = trigia;

            return sach;
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện form load
        //----------------------------------------------------------------------
        private void GUISach_Load(object sender, EventArgs e)
        {
            CapNhatGiaoDien();
            CapNhatNoiDung();
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button Thoat
        //----------------------------------------------------------------------
        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button Sua
        //----------------------------------------------------------------------
        private void btnSua_Click(object sender, EventArgs e)
        {
            DTOSach sachmoi = LayDuLieuForm();
            if (sachmoi != null)
            {
                if (sachmoi.NamXB == _Sach.NamXB && sachmoi.NhaXB == _Sach.NhaXB && sachmoi.TriGia == _Sach.TriGia)
                    MessageBox.Show("Chưa chọn thông tin thay đổi");
                else
                { 
                    //kiểm tra lần xuất bản
                    int dem = _bllSach.DemLanXuatBan(sachmoi.MaDauSach, sachmoi.NamXB, sachmoi.NhaXB);
                    if (dem < 0)
                        MessageBox.Show("Không kiểm tra được lần xuất bản");
                    else if (dem > 0)
                        MessageBox.Show("Lần xuất bản này đã tồn tại");
                    else
                    { 
                        //update here
                        if (_bllSach.CapNhat(sachmoi))
                        {
                            MessageBox.Show("Cập nhật thành công");
                            _Sach = sachmoi;
                        }
                        else
                            MessageBox.Show("Cập nhật thất bại");
                    }
                    CapNhatNoiDung();
                }
            }
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện key press
        //----------------------------------------------------------------------
        private void txtNhapSo_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e != null)
            {
                if (Utils.CheckKeyCode(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
            }
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện key press
        //----------------------------------------------------------------------
        private void Special_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Utils.IsSpecialKey(e.KeyChar))
                e.Handled = true;
            else
                e.Handled = false;
        }
    }
}
